(function($) {

    var pubSub = $(document);

    pubSub.on('box:minimize', function(e, a) {
        var $box = $(a).closest('.box');
        $box.find('.content').slideToggle();
    });

    pubSub.on('box:refresh', function(e, a) {
        var $box = $(a).closest('.box');
        var resource = $box.data('resource');
        var spinner = $('<div class="spinner"><i class="fa fa-refresh fa-spin"></i></div>').hide();
        spinner.css({lineHeight: $box.height() + 40 + 'px'});
        if (resource) {
            spinner.appendTo($box).fadeIn('slow');
            $.get(resource)
                .done(function(resp) {
                    $box.find('.content').html(resp);
                    spinner.fadeOut(function() { spinner.remove(); });
                });
        }
    });

    pubSub.on('box:destroy', function(e, a) {
        var $box = $(a).closest('.box');
        $box.fadeOut(function() {
            $box.remove();
        });
    });


    $(document).on('click', '.box a.minimize', function(e) {
        e.preventDefault();
        $(this).trigger('box:minimize', this);
    });

    $(document).on('click', '.box a.destroy', function(e) {
        e.preventDefault();
        $(this).trigger('box:destroy', this);
    });

    $(document).on('click', '.box a.refresh', function(e) {
        e.preventDefault();
        $(this).trigger('box:refresh', this);
    });

}(jQuery));